package com.github.freegeese.maven.plugin.autocode.demo.base;

import org.apache.ibatis.annotations.Param;

/**
 * 可排序的Mapper
 *
 * @param <E>
 * @param <ID>
 */
public interface SortableMapper<E, ID> extends BaseMapper<E, ID> {
    /**
     * 交换位置
     *
     * @param source
     * @param target
     * @return
     */
    int exchange(@Param("source") E source, @Param("target") E target);

    /**
     * 从 from 移动到 to
     *
     * @param from
     * @param to
     * @return
     */
    int move(@Param("from") E from, @Param("to") E to);

    /**
     * 查询目标的上一行
     *
     * @param target
     * @return
     */
    E selectPrevious(E target);

    /**
     * 查询目标的下一行
     *
     * @param target
     * @return
     */
    E selectNext(E target);

    /**
     * 查询第一行
     *
     * @return
     */
    E selectFirst();

    /**
     * 查询最后一行
     *
     * @return
     */
    E selectLast();

}
